/**
 * 简单的本地存储管理SDK
 * 提供localStorage的安全封装，支持数据加密和过期时间设置
 */
(function(window) {
    // 避免全局变量污染，使用命名空间
    const StorageSDK = {
        // 配置项
        config: {
            prefix: 'sdk_', // 键名前缀，避免冲突
            encrypt: false, // 是否加密存储
            secret: 'default_secret' // 加密密钥
        },

        /**
         * 初始化SDK
         * @param {Object} options - 配置选项
         * @param {string} options.prefix - 键名前缀
         * @param {boolean} options.encrypt - 是否加密
         * @param {string} options.secret - 加密密钥
         */
        init(options = {}) {
            this.config = { ...this.config, ...options };
            return this; // 支持链式调用
        },

        /**
         * 存储数据
         * @param {string} key - 键名
         * @param {any} value - 存储的值
         * @param {number} expire - 过期时间(秒)，0表示永久
         */
        set(key, value, expire = 0) {
            try {
                // 构建存储对象
                const data = {
                    value,
                    expire: expire > 0 ? Date.now() + expire * 1000 : 0
                };

                // 处理键名前缀
                const storageKey = this.config.prefix + key;
                
                // 序列化数据
                let storageValue = JSON.stringify(data);
                
                // 如果需要加密
                if (this.config.encrypt) {
                    storageValue = this._encrypt(storageValue);
                }

                // 存储到localStorage
                localStorage.setItem(storageKey, storageValue);
                return true;
            } catch (error) {
                console.error('StorageSDK set failed:', error);
                return false;
            }
        },

        /**
         * 获取数据
         * @param {string} key - 键名
         * @returns {any} 存储的值，过期或不存在则返回null
         */
        get(key) {
            try {
                const storageKey = this.config.prefix + key;
                const storageValue = localStorage.getItem(storageKey);

                if (!storageValue) return null;

                // 如果需要解密
                let dataStr = this.config.encrypt ? this._decrypt(storageValue) : storageValue;
                
                // 解析数据
                const data = JSON.parse(dataStr);

                // 检查是否过期
                if (data.expire > 0 && Date.now() > data.expire) {
                    this.remove(key); // 过期数据自动清理
                    return null;
                }

                return data.value;
            } catch (error) {
                console.error('StorageSDK get failed:', error);
                return null;
            }
        },

        /**
         * 删除数据
         * @param {string} key - 键名
         */
        remove(key) {
            try {
                const storageKey = this.config.prefix + key;
                localStorage.removeItem(storageKey);
                return true;
            } catch (error) {
                console.error('StorageSDK remove failed:', error);
                return false;
            }
        },

        /**
         * 清空所有前缀匹配的数据
         */
        clear() {
            try {
                const keys = Object.keys(localStorage);
                keys.forEach(key => {
                    if (key.startsWith(this.config.prefix)) {
                        localStorage.removeItem(key);
                    }
                });
                return true;
            } catch (error) {
                console.error('StorageSDK clear failed:', error);
                return false;
            }
        },

        /**
         * 简单加密算法
         * @param {string} str - 要加密的字符串
         * @returns {string} 加密后的字符串
         */
        _encrypt(str) {
            // 实际项目中可替换为更安全的加密算法
            let result = '';
            for (let i = 0; i < str.length; i++) {
                result += String.fromCharCode(str.charCodeAt(i) + this.config.secret.length);
            }
            return result;
        },

        /**
         * 简单解密算法
         * @param {string} str - 要解密的字符串
         * @returns {string} 解密后的字符串
         */
        _decrypt(str) {
            let result = '';
            for (let i = 0; i < str.length; i++) {
                result += String.fromCharCode(str.charCodeAt(i) - this.config.secret.length);
            }
            return result;
        }
    };

    // 暴露到全局
    window.StorageSDK = StorageSDK;
})(window);
    